#include<iostream>
using namespace std;
typedef int Status;
typedef int ElemType;
int m; //m为操作次数
typedef struct LNode {
    ElemType data; //结点的数据域
    struct LNode *next; //结点的指针域
}LNode, *LinkList; //LinkList为指向结构体LNode的指针类型

void CreateList_R(LinkList &L, int n){
    L = new LNode;
    L->next = NULL;
    LNode *r = L;
    while(n--){
        LNode *p = new LNode;
        cin >> p->data;
        p->next = NULL;
        r->next = p;
        r = p;
    }
}

LNode *LocateElem(LinkList L, ElemType e){
    if(!L) return NULL;
    LNode *p = L->next;
    while(p && p->data != e){
        p = p->next;
    }
    return p;
}

void ListInsert(LinkList &L, ElemType e){
    LNode *p = new LNode;
    p->data = e;
    p->next = L->next;
    L->next = p;
}

void MergeList(LinkList &LA, LinkList LB){
    LNode *pb = LB;
    while(pb->next){
        if(!LocateElem(LA, pb->next->data)){
            ListInsert(LA, pb->next->data);
        }
        pb = pb->next;
    }
}

void Out_list(LinkList L){//输出单链表
    LinkList p;
    p = L->next;
    while (p){
        cout <<p->data<<' ';
        p = p->next;
    }
    cout<<endl;
}

int main() {
    LinkList LA,LB;
    int j,k;
    cin >> m;     //m次操作
    while(m --) {
        char op;
        cin >> op;
        switch(op){
            case 'A'://创建单链表LA
                cin>>j;
                CreateList_R(LA, j);
                Out_list(LA);
                break;
            case 'B'://创建单链表LB
                cin>>k;
                CreateList_R(LB, k);
                Out_list(LB);
                break;
            case 'M'://合并
                MergeList(LA, LB);
                Out_list(LA);
                break;
        }
    }
    return 0;
}
